/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pojos;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import util.Servicio;

/**
 * Clase contenedora de datos de la tabla usuario
 * @author Miguel
 */
public class Usuario implements Pojo {
    /** Constante simbolica para indicar que un usuario es proveedor */
    public static final int PROVEEDOR=1;
    /** Constante simbolica para indicar que un usuario es estandard */
    public static final int ESTANDARD=0;

    private int id;
    private String usu_login;
    private String usu_passwd;
    private String usu_nombre;
    private int usu_tipo;
    private String usu_metodo_pago;
    private String usu_email;
    private Date usu_fecha_alta;
    private Date usu_ultima_visita;
    private double usu_saldo;    
    
    public Usuario(int id, String usu_login, String usu_passwd, String usu_nombre, 
            int usu_tipo, String usu_metodo_pago, String usu_email,
            Date usu_fecha_alta, Date usu_ultima_visita, double usu_saldo) {
        
        darValores(id, usu_login, usu_passwd, usu_nombre, usu_tipo, 
                usu_metodo_pago, usu_email, usu_fecha_alta,
                usu_ultima_visita, usu_saldo);
        
    }
    
    public Usuario(String usu_login, String usu_passwd, String usu_nombre, 
            int usu_tipo, String usu_metodo_pago, String usu_email,
            Date usu_fecha_alta, Date usu_ultima_visita, double usu_saldo) {
        
        darValores(-1, usu_login, usu_passwd, usu_nombre, usu_tipo, 
                usu_metodo_pago, usu_email, usu_fecha_alta,
                usu_ultima_visita, usu_saldo);
        
    }
    
    private void darValores(int id, String usu_login, String usu_passwd,
            String usu_nombre, int usu_tipo, String usu_metodo_pago,
            String usu_email, Date usu_fecha_alta, Date usu_ultima_visita, double usu_saldo) {
                       
        this.id = id;
        this.usu_login = usu_login;
        this.usu_passwd = usu_passwd;
        this.usu_nombre = usu_nombre;
        this.usu_tipo = usu_tipo;
        this.usu_metodo_pago = usu_metodo_pago;
        this.usu_email = usu_email;
        this.usu_fecha_alta = usu_fecha_alta;
        this.usu_ultima_visita = usu_ultima_visita;
        this.usu_saldo = usu_saldo;
    }
    

    /**
     * @return the id
     */
    public int getId() {
        return id;
    }

    /**
     * @return the usu_login
     */
    public String getUsu_login() {
        return usu_login;
    }

    /**
     * @return the usu_passwd
     */
    public String getUsu_passwd() {
        return usu_passwd;
    }

    /**
     * @return the usu_nombre
     */
    public String getUsu_nombre() {
        return usu_nombre;
    }

    /**
     * @return the usu_tipo
     */
    public int getUsu_tipo() {
        return usu_tipo;
    }

    /**
     * @return the usu_metodo_pago
     */
    public String getUsu_metodo_pago() {
        return usu_metodo_pago;
    }

    /**
     * @return the usu_email
     */
    public String getUsu_email() {
        return usu_email;
    }

    /**
     * @return the usu_fecha_alta
     */
    public Date getUsu_fecha_alta() {
        return usu_fecha_alta;
    }

    /**
     * @return the usu_ultima_visita
     */
    public Date getUsu_ultima_visita() {
        return usu_ultima_visita;
    }

    /**     
     * @return the usu_saldo
     */
    public double getUsu_saldo() {
        return usu_saldo;
    }
    
    
    public void setUsu_saldo(double usu_saldo) {
		this.usu_saldo = usu_saldo;
	}

	public void setUsu_passwd(String usu_passwd) {
		this.usu_passwd = usu_passwd;
	}

	public void setId(int id) {
		this.id = id;
	}

	public void setUsu_login(String usu_login) {
		this.usu_login = usu_login;
	}

	public void setUsu_nombre(String usu_nombre) {
		this.usu_nombre = usu_nombre;
	}

	public void setUsu_tipo(int usu_tipo) {
		this.usu_tipo = usu_tipo;
	}

	public void setUsu_metodo_pago(String usu_metodo_pago) {
		this.usu_metodo_pago = usu_metodo_pago;
	}

	public void setUsu_email(String usu_email) {
		this.usu_email = usu_email;
	}

	public void setUsu_fecha_alta(Date usu_fecha_alta) {
		this.usu_fecha_alta = usu_fecha_alta;
	}

	public void setUsu_ultima_visita(Date usu_ultima_visita) {
		this.usu_ultima_visita = usu_ultima_visita;
	}

	@Override
    public int guardar(Connection con) {
        int count = 0;
        if (this.getId() == -1) {
            PreparedStatement stmt = null;              
            String sql="INSERT INTO usuario(usu_login, usu_passwd, usu_nombre, "
                    + "usu_tipo, usu_metodo_pago, usu_email, usu_fecha_alta, "
                    + "usu_ultima_visita, usu_saldo) VALUES(?,sha1(?),?,?,?,?,?,?,?)";
            try {
                stmt = con.prepareStatement(sql);
                stmt.setString(1, this.getUsu_login());
                stmt.setString(2, this.getUsu_passwd());
                stmt.setString(3, this.getUsu_nombre());
                stmt.setInt(4, this.getUsu_tipo());
                stmt.setString(5, this.getUsu_metodo_pago());
                stmt.setString(6, this.getUsu_email());
                stmt.setString(7, Servicio.getSdf().format(this.getUsu_fecha_alta()));
                stmt.setString(8, Servicio.getSdf().format(this.getUsu_ultima_visita()));
                stmt.setDouble(9, this.getUsu_saldo());
                count=stmt.executeUpdate();
            } catch (SQLException ex) {
                Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
            } finally {
                try {
                    if (stmt != null) {
                        stmt.close();
                    }
                } catch (SQLException ex) {
                    Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        } else {
            PreparedStatement stmt = null;
            String sql="UPDATE usuario SET usu_login=?, usu_passwd=?, usu_nombre=?, "
                    + "usu_tipo=?, usu_metodo_pago=?, usu_email=?, usu_fecha_alta=?, "
                    + "usu_ultima_visita=?, usu_saldo=? WHERE id=?";
            try {
                stmt = con.prepareStatement(sql);
                stmt.setString(1, this.getUsu_login());
                stmt.setString(2, this.getUsu_passwd());
                stmt.setString(3, this.getUsu_nombre());
                stmt.setInt(4, this.getUsu_tipo());
                stmt.setString(5, this.getUsu_metodo_pago());
                stmt.setString(6, this.getUsu_email());
                stmt.setString(7, Servicio.getSdf().format(this.getUsu_fecha_alta()));
                stmt.setString(8, Servicio.getSdf().format(this.getUsu_ultima_visita()));
                stmt.setDouble(9, this.getUsu_saldo());
                count=stmt.executeUpdate();
            } catch (SQLException ex) {
                Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
            } finally {
                try {
                    if (stmt != null) {
                        stmt.close();
                    }
                } catch (SQLException ex) {
                    Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            
        }
        
        

        return count;
    }

    @Override
    public int borrar(Connection con) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    } 
}
